package main

import (
	"fmt"
	"math"
)

func main() {

	const factor = 3 // factor与任何数值类型兼容
	i := 2000        // 通过推断得 i 的类型为int
	i *= factor
	j := int16(20) //j 的类型为int16 ,与这样定义效果一样，var j int16 =2-
	i += int(j)    // 类型必须匹配，因此需要转换
	k := uint8(0)  //
	k = uint8(i)   // 转换成功，但是k值被截断。

	fmt.Println(factor, i, j, k)
}

// 为了执行缩小尺寸的类型转换，我们可以创建合适的函数.
func Uint8FromInt(x int) (uint8, error) {
	if 0 <= x && x <= math.MaxUint8 {
		return uint8(x), nil
	}
	return 0, fmt.Errorf("%d is out of the uint8 range", x)
}
